STAAD.Pro Help

OS. 動的出力の取得

次の例のマクロでは、いくつかのOpenSTAAD動的出力関数を使用して、動的解析の結果のモード形状レポートを作成します。

この例について

このマクロでは、最初に解析結果が利用可能であるかを確認します。可能な場合、テキストの結果ファイルへの情報の出力を開始します。抽出されたモードの数がゼロより大きい場合、モーダル振動数、モーダル有効質量比、およびモーダル歪みがこのレポートに出力されます。

このコードは、.vbsファイルに直接保存することも、STAAD.Proで使用するマクロプロジェクトでマクロエディタに貼り付けることもできます。

Visual Basicコード

Option Explicit

Sub Main()
    Dim stdFile As String
    Dim stdFolder As String
    Dim rptFile As String
    Dim Tokens() As String
    Dim boolResults As Boolean

    Dim objOpenSTAAD As Object

    Set objOpenSTAAD = GetObject(,"StaadPro.OpenSTAAD")
    objOpenSTAAD.GetSTAADFile(stdFile, False)
    objOpenSTAAD.GetSTAADFileFolder(stdFolder)

    If objOpenSTAAD.Output.AreResultsAvailable = "True" Then
        Tokens = Split(stdFile,".")
        rptFile = stdFolder + "\" + Tokens(0) + ".ModeShapeData.txt"
        CreateModeShapeReport(rptFile, objOpenSTAAD, stdFile)
    Else
        MsgBox("No analysis results available for this input file",vbOkOnly,"Error")
    End If

    Set objOpenSTAAD = Nothing

End Sub

Private Function CreateModeShapeReport(rptFile As String, objOpenSTAAD As Object, stdFile As String)
 Dim I As Integer, J As Integer
 Dim nNodeCount As Long
 Dim nModeCount As Long
 Dim nModeNo As Long
 Dim strLenUnit As String
 Dim setOfNodes() As Long
 Dim setOfFrequency() As Double
 Dim modVal(6) As Double

 Dim szName As String
 Dim tblno As Long
 Dim rptno As Long
 Dim idx As Long

 Dim geometry As OSGeometryUI
 Dim Output As OSOutputUI
 Set geometry = objOpenSTAAD.Geometry
 Set Output = objOpenSTAAD.Output

 nNodeCount = geometry.GetNodeCount()

'Variant GetNoOfModesExtracted();
 nModeCount = Output.GetNoOfModesExtracted()

 Open rptFile For Output As #10
 Print #10, "Mode Shape Data Report for",stdFile
 Print #10, ""
 Print #10, Space$(3);"No of Nodes  = ";nNodeCount
 Print #10, Space$(3);"No of Modes Extracted = ";nModeCount
 Print #10, ""

 If nModeCount > 0 Then

     ReDim setOfNodes(nNodeCount)
     ReDim setOfFrequency(nModeCount)

'Variant GetModeFrequency(Variant varMode, Variant varFreq);
     Print #10, "Mode      Frequency (Hz)"
     Print #10, "-------------------------"
     For I = 0 To nModeCount - 1
        nModeNo = I+1
        Output.GetModeFrequency(nModeNo, setOfFrequency(I))
        Print #10, nModeNo;Space$(10);Format$(setOfFrequency(I),"Standard")
     Next
     Print #10, "-------------------------"
     Print #10,

'Variant GetModalMassParticipationFactors(Long longMode, Variant varfactorX, Variant varfactorY, Variant varfactorZ);
    Dim Participation(3) As Double
    Dim ParticipationSum(3) As Double
    Print #10, Space$(18);"Modal Participation Factors Table"
    Print #10, "Mode    Participation X (%)    Participation Y (%)    Participation Z (%)"
     Print #10, "-------------------------------------------------------------------------"
     For I = 0 To nModeCount - 1
        nModeNo = I+1
        Output.GetModalMassParticipationFactors(nModeNo, Participation(1), Participation(2), Participation(3))
        Print #10, nModeNo;Space$(10);Format$(Participation(1),"#0.00"); Space$(20); Format$(Participation(2),"#0.00"); Space$(20); Format$(Participation(3),"##0.00")
        ParticipationSum(1) = ParticipationSum(1) +Participation(1)
        ParticipationSum(2) = ParticipationSum(2) +Participation(2)
        ParticipationSum(3) = ParticipationSum(3) +Participation(3)
     Next
     Print #10, "-------------------------------------------------------------------------"
     Print #10, "Sum";Space$(9);Format$(ParticipationSum(1),"#0.00"); Space$(20); Format$(ParticipationSum(2),"#0.00"); Space$(20); Format$(ParticipationSum(3),"#0.00")
     Print #10,

'Variant GetModalDisplacementAtNode(Variant varMode, Variant arNode, Variant varModalDisps);
     geometry.GetNodeList(setOfNodes)
     objOpenSTAAD.GetInputUnitForLength(strLenUnit)

     Print #10, Space$(10);"Modal Displacements Table"
     Print #10, "Mode  Node         x            y             z"
     Print #10, Space$(18);"(";strLenUnit;")";Space$(9);"(";strLenUnit;")";Space$(10);"(";strLenUnit;")"
     Print #10, "--------------------------------------------------"
     For I = 0 To nModeCount - 1
        nModeNo = I+1
        For J = 0 To nNodeCount - 1
            Output.GetModalDisplacementAtNode(nModeNo, setOfNodes(J), modVal)
            Print #10, Format$(nModeNo,"00");Space$(5);Format$(setOfNodes(J),"000");Space$(5);Format$(modVal(0),"Scientific");Space$(5);Format$(modVal(1),"Scientific");Space$(5);Format$(modVal(2),"Scientific")
        Next J
     Next I
     Print #10, "--------------------------------------------------"
     Print #10,

'The following function is currently not operational:-
'Variant GetMissingMassParticipationFactors

 End If

Close #10

End Function